当您需要对部署在容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)中的Python应用进行监控时,通过安装ARMS应用监控组件ack-onepilot并修改对应的Dockerfile,即可在应用实时监控服务ARMS中查看对应应用的应用拓扑、接口调用、调用链分析等相关监控数据。本文将介绍如何为部署在容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)中的Python应用安装探针。
如果您在使用Python探针过程中有任何问题,欢迎通过钉钉答疑群(群号:35568145)与我们联系。
前提条件
创建Kubernetes集群。您可按需选择创建ACK专有集群、创建ACK托管集群或创建ACK Serverless集群。
创建命名空间,具体操作,请参见管理命名空间与配额。本文示例中的命名空间名称为arms-demo。
检查您的Python版本和框架版本。具体要求,请参见Python探针兼容性要求。
注意事项
如果应用使用Unicorn启动,需要替换为Gunicorn。
例如:
unicorn -w 4 -b 0.0.0.0:8000 app:app
修改为:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 app:app
如果有使用gevent协程,则需要设置环境变量
GEVENT_ENABLE=true
。例如程序中有使用:
from gevent import monkey monkey.patch_all()
需要设置环境变量如下:
GEVENT_ENABLE=true
步骤一:安装ARMS应用监控组件
登录容器服务管理控制台,在集群列表页面,单击目标集群名称进入集群详情页。
在左侧导航栏选择
,然后在右上角通过关键字搜索ack-onepilot。重要请确保ack-onepilot的版本在3.2.4或以上。
在ack-onepilot卡片上单击安装。
说明ack-onepilot组件默认支持1000个pod规模,集群pod每超过1000个,ack-onepilot资源对应的CPU请增加0.5核、内存请增加512 MB。
在弹出的页面中可以配置相关的参数,建议使用默认值,单击确定。
说明安装完成后,您可以在组件管理页面升级、配置或卸载ack-onepilot组件。
步骤二:修改Dockerfile
从PyPI仓库下载探针安装器。
pip3 install aliyun-bootstrap
使用aliyun-bootstrap安装探针。
aliyun-bootstrap -a install
通过ARMS Python探针启动应用。
aliyun-instrument python app.py
构建镜像。
完整的Dockerfile示例如下:
步骤三:授予ARMS资源的访问权限
如果需监控ASK(容器服务Serverless版)或对接了ECI的集群应用,请在云资源访问授权页面完成授权,然后重启ack-onepilot组件下的所有Pod。
如果需监控ACK集群应用,但ACK集群中不存在ARMS Addon Token,请执行以下操作手动为集群授予ARMS资源的访问权限。如果已经存在ARMS Addon Token,请跳转至步骤四。
说明集群存在ARMS Addon Token时,ARMS会进行免密授权。Kubernetes托管版集群默认存在ARMS Addon Token,但对于部分早期创建的Kubernetes托管版集群,可能会存在没有ARMS Addon Token的情况,因此,对于Kubernetes托管版集群,建议首先检查ARMS Addon Token是否存在。若不存在,需进行手动授权。
如果需要监控专有版集群和注册集群应用,请确认对应的阿里云账号已包含AliyunARMSFullAccess和AliyunSTSAssumeRoleAccess权限。添加权限的操作,请参见为RAM用户授权。
安装ack-onepilot组件后,还需要在ack-onepilot中填写有ARMS权限的阿里云账号AK/SK。
在左侧导航栏选择
页面,单击ack-onepilot组件右侧的更新。将
accessKey
和accessKeySecret
替换为当前账号的AccessKey,然后单击确定。说明获取AccessKey的操作,请参见创建AccessKey。
重启应用Deployment。
步骤四:为Python应用开启ARMS应用监控
在容器服务管理控制台左侧导航栏单击集群,在集群列表页面上的目标集群右侧操作列单击应用管理。
在无状态页面的目标应用右侧选择
。如需创建一个新应用,单击使用YAML创建资源。
在YAML文件中将以下
labels
添加到spec.template.metadata层级下。labels: aliyun.com/app-language: python # Python应用必填,标明此应用是Python应用。 armsPilotAutoEnable: 'on' armsPilotCreateAppName: "<your-deployment-name>" #应用在ARMS中的展示名称
创建无状态(Deployment)应用并开启ARMS应用监控的完整YAML示例模板如下:
执行结果
约一分钟后,若Python应用出现在ARMS控制台的 页面中且有数据上报,则说明接入成功。